package zutils

import (
	"encoding/json"
	"github.com/ShiYY/zinx/ziface"
	"io/ioutil"
)

/*
	存储一切有关zinx框架的全局参数 供其它模块使用
	一些参数是可以通过zinx.json由用户进行配置
 */

type GlobalObj struct {
	/* Server */
	// zinx全局的Server对象
	TcpServer ziface.IServer
	// 服务器主机监听的IP
	Host string
	// 服务器主机监听的端口号
	TcpPort int
	// 服务器名称
	Name string

	/* zinx */
	// zinx的版本号
	Version string
	// 服务器主机允许的最大链接数
	MaxConn int
	// zinx框架数据包的最大值
	MaxPackageSize uint32
}

/* 定义一个全局的对外GlobalObj */
var GlobalObject *GlobalObj

/* 从zinx.json去加载用于自定义的参数 */
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile("conf/zinx.json")
	if err != nil {
		panic(err)
	}

	// 将json文件数据解析到struct中
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		panic(err)
	}
}

// 提供一个init方法 初始化当前的 GlobalObject
func init() {
	// 如果配置文件没有加载 这里是一个默认的值
	GlobalObject = &GlobalObj{
		Name:           "zinxApp",
		Version:        "v0.4",
		TcpPort:        9000,
		Host:           "0.0.0.0",
		MaxConn:        1000,
		MaxPackageSize: 4096,
	}

	// 应该尝试从conf/zinx.json去加载一些用户自定义的参数
	GlobalObject.Reload()
}
